package leetcode.code1318;

import leetcode.helper.MaxDebug;

public class Solution extends Solution1318 {

	@Override
	public int minFlips(int a, int b, int c) {
		if ((a | b) == c) {
			return 0;
		}
		int ans = 0;
		while (c > 0) {
			int lastc = (c & 1);
			int lasta = (a & 1);
			int lastb = (b & 1);
			if ((lasta | lastb) != lastc) {// 最后一位或起来不等，需要处理
				if (lastc == 1) {// c是1，说明ab中一个1没有，做一次操作就行，随便谁
					ans++;
				} else {
					if (lasta == 1) {// c是0，a是1就得翻成0
						ans++;
					}
					if (lastb == 1) {// c是0，b是1就得翻成0
						ans++;
					}
				}
			}
			a >>= 1;// 处理下一位
			b >>= 1;
			c >>= 1;
		}
		while (a > 0) {// a较长
			if ((a & 1) == 1)// 翻1的时候操作+1
				ans++;
			a >>= 1;
		}
		while (b > 0) {// 同上
			if ((b & 1) == 1)
				ans++;
			b >>= 1;
		}
		return ans;
	}

	public static void main(String[] args) {
		Solution so = new Solution();
		so.debug5();
		MaxDebug.debug14(so);
		// 8 3 5
		// 1000
		// 0011
		// 0101
	}

}
